CREATE PROCEDURE sp_RepInfPosesorias

-- Parametros

@SeleccionFechas int ,	-- 1 = NO , 2 = SI
@FechaDesde varchar(30) ,
@FechaHasta varchar(30) ,
@Expediente varchar(20) ,
@Procurador int , 
@ZonaJuzgado int ,
@SubZonaJuzgado int ,
@ConsecutivoJuzgado int ,
@Area int , 
@Materia int , 
@Tipo int , 
@Asunto int , 
@Participacion_Estado int , 
@Promovente varchar(100) ,
@Perjudicado varchar(100) ,

@SeleccionVigencia int ,	-- 0 = Cerrados , 1 = Activos , 2 = Todos
@SeleccionTipoDocumento int ,	-- -1 = Todos , 1 = Litigio , 2 = Actividad No-Contenciosa , 3 = No Corresponde a PGR
@Ordenamiento int ,		-- 1 = Expediente , 2 = Fechas , 3 = Partes , 4 = Procurador

@InstitucionInvolucrada int , 
@EstadosProcesales varchar(8000) , 
@TerrenosAfectados varchar(8000) , 
@Num_Plano varchar(30) ,
@Area_Terreno smallint , 
@Hoja_Cartografica varchar(100) ,
@Vert_Inicial smallint , 
@Vert_Final smallint , 
@Horz_Inicial smallint , 
@Horz_Final smallint , 
@Comentarios varchar(125)

AS

DECLARE
@FechaInicial datetime ,
@FechaFinal datetime , 
@Hilera varchar(8) ,	-- para "descomprimir" Estados Procesales y Terrenos Afectados 
@Posicion smallint	-- para "descomprimir" Estados Procesales y Terrenos Afectados 
SET @FechaInicial = CONVERT( DATETIME , LEFT( @FechaDesde , 10 ) + ' 00:00:00' , 121 ) 
SET @FechaFinal   = CONVERT( DATETIME , LEFT( @FechaHasta , 10 ) + ' 23:59:00' , 121 ) 

SELECT EstadoProcesal INTO #EstadosProcesales FROM EstadoProcesal WHERE 1 = 2
IF LEN( @EstadosProcesales ) = 0
	INSERT #EstadosProcesales SELECT EstadoProcesal FROM EstadoProcesal
ELSE
	BEGIN
	WHILE LEN( @EstadosProcesales ) <> 0
		BEGIN
		SET @Posicion = CHARINDEX( ',' , @EstadosProcesales )
		SET @Hilera = LEFT( @EstadosProcesales , @Posicion - 1 )
		INSERT #EstadosProcesales VALUES( CONVERT( int , @Hilera ) )
		IF LEN( @EstadosProcesales ) > @Posicion + 1 
			SET @EstadosProcesales = SUBSTRING( @EstadosProcesales , @Posicion + 1 , LEN( @EstadosProcesales ) )
		ELSE
			SET @EstadosProcesales = ' '
		END
	END
SELECT Terreno_Afectado INTO #TerrenosAfectados FROM Terrenos_Afectados WHERE 1 = 2
IF LEN( @TerrenosAfectados ) = 0 
	INSERT #TerrenosAfectados SELECT Terreno_Afectado FROM Terrenos_Afectados
ELSE
	BEGIN
	WHILE LEN( @TerrenosAfectados ) <> 0
		BEGIN
		SET @Posicion = CHARINDEX( ',' , @TerrenosAfectados )
		SET @Hilera = LEFT( @TerrenosAfectados , @Posicion - 1 )
		INSERT #TerrenosAfectados VALUES( CONVERT( int , @Hilera ) ) 
		IF LEN( @TerrenosAfectados ) > @Posicion + 1 
			SET @TerrenosAfectados = SUBSTRING( @TerrenosAfectados , @Posicion + 1 , LEN( @TerrenosAfectados ) )
		ELSE
			SET @TerrenosAfectados = ' '
		END
	END

SELECT	DISTINCT 	
	v.Nombre_Procurador AS Procurador, 
	e.Expediente , 
	e.Fecha_Ing_PGR , 
	j.Nombre AS Juzgado , 
	a.Nombre AS Area , 
	m.nombre AS Materia_Tipo_Asunto, 
	p.Nombre AS Participacion_Estado , 
	e.Promovente , 
	e.Perjudicado ,  
	t.nombre AS Estado_Procesal
INTO	#Datos_Fuente 
FROM 	Expediente e 
	INNER JOIN Procuradores_X_Expediente x 
		ON e.expediente = x.expediente AND x.primario_chk = '1'
	INNER JOIN View_Nombre_Procuradores v
			ON x.procurador = v.procurador 
	INNER JOIN Juzgados j 
		ON e.juzgado = j.juzgado 
	INNER JOIN Area a 		ON a.area = x.area 
	INNER JOIN MateriaTipoAsunto m 
		ON m.materiatipoasunto = x.materiatipoasunto 
	INNER JOIN Participacion_Estado AS p 
		ON p.Participacion_Estado = x.Participacion_Estado 
	INNER JOIN EstadoProcesal t 
		ON t.estadoprocesal = x.estadoprocesal 
	
	INNER JOIN Instituciones_X_Expediente k 
		ON e.expediente = k.expediente 
	INNER JOIN InstitucionInvolucrada i 
		ON k.InstitucionInvolucrada = i.InstitucionInvolucrada 
	
	LEFT OUTER JOIN Terrenos_x_Expediente x2 
		ON e.expediente = x2.expediente 
	LEFT OUTER JOIN Terrenos_Afectados AS t2  
		ON x2.Terreno_Afectado = t2.Terreno_Afectado 
	 
	LEFT OUTER JOIN Planos_x_Expediente x3 
		ON e.expediente = x3.expediente 
	
WHERE	x.Activo_Cerrado = CASE @SeleccionVigencia		-- 0 = Cerrados 1 = Activos , -1 = Todos
				WHEN -1 THEN x.Activo_Cerrado
				ELSE @SeleccionVigencia
				END

	AND e.Tipo_Expediente =	CASE @SeleccionTipoDocumento
					WHEN  -1 THEN e.Tipo_Expediente
					ELSE @SeleccionTipoDocumento
					END

	AND e.fecha_ing_pgr BETWEEN CASE @SeleccionFechas
					WHEN 1 THEN e.fecha_ing_pgr
					ELSE @FechaInicial
					END
				AND CASE @SeleccionFechas
					WHEN 1 THEN e.fecha_ing_pgr
					ELSE @FechaFinal
					END

	-- el Expediente es buscado tanto en la columna Expediente como en la columna Equivale_A por acumulacion de expedientes
	AND (
		e.expediente LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.expediente
					ELSE '%' + @Expediente + '%'
					END
		OR
		e.Equivale_A LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.Equivale_A 
					ELSE '%' + @Expediente + '%'
					END
	     )

	AND x.Procurador = CASE @Procurador
				WHEN -1 THEN x.Procurador 
				ELSE @Procurador
				END

	AND e.juzgado - (e.juzgado % 10000) =	
				CASE @ZonaJuzgado
					WHEN -1 THEN e.juzgado - (e.juzgado % 10000) 
					ELSE @ZonaJuzgado * 10000
					END

	AND (e.juzgado % 10000)/100 = CASE @SubZonaJuzgado
					WHEN -1 THEN (e.juzgado % 10000)/100 
					ELSE @SubZonaJuzgado 
					END

	AND (e.juzgado % 10000) % 100 =	CASE @ConsecutivoJuzgado
						WHEN -1 THEN (e.juzgado % 10000) % 100 
						ELSE @ConsecutivoJuzgado
						END

	AND x.Participacion_Estado =	CASE @Participacion_Estado
						WHEN -1 THEN x.Participacion_Estado 
						ELSE @Participacion_Estado
						END

	AND e.Promovente LIKE CASE LEN( @Promovente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.Promovente 
					ELSE '%' + @Promovente + '%'
					END

	AND e.perjudicado LIKE CASE LEN( @Perjudicado ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.perjudicado
					ELSE '%' + @Perjudicado + '%'
					END

	AND x.area = CASE @Area
			WHEN -1 THEN x.area 
			ELSE @Area
			END

	AND x.materiatipoasunto - (x.materiatipoasunto % 10000) = 
			CASE @Materia
				WHEN -1 THEN x.materiatipoasunto - (x.materiatipoasunto % 10000) 
				ELSE @Materia * 10000
				END

	AND (x.materiatipoasunto % 10000)/100 = 
			CASE @Tipo
				WHEN -1 THEN (x.materiatipoasunto % 10000)/100 
				ELSE @Tipo
				END

	AND (x.MateriaTipoAsunto % 10000) % 100 = 
			CASE @Asunto
				WHEN -1 THEN (x.MateriaTipoAsunto % 10000) % 100 
				ELSE @Asunto
				END

	AND k.institucioninvolucrada = CASE @InstitucionInvolucrada
						WHEN -1 THEN k.institucioninvolucrada 
						ELSE @InstitucionInvolucrada
						END

	AND x.estadoprocesal IN ( SELECT * FROM #EstadosProcesales )

	AND x.comentarios LIKE CASE LEN( @Comentarios ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN x.comentarios
					ELSE '%' + @Comentarios + '%'
					END

	AND (	x2.Terreno_Afectado IN ( SELECT * FROM #TerrenosAfectados ) 
		OR 
		x2.Terreno_Afectado IS NULL )

	AND (	x3.Num_Plano LIKE CASE LEN( @Num_Plano ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN x3.Num_Plano 
					ELSE '%' + @Num_Plano + '%'
					END
		OR 
		x3.Num_Plano IS NULL )

	AND (	x3.Area = CASE @Area_Terreno
			WHEN 0 THEN e.Area 
			ELSE @Area_Terreno
			END
 		OR 
		x3.Area IS NULL )

	AND (	x3.Hoja_Cartografica LIKE CASE LEN( @Hoja_Cartografica ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN x3.Hoja_Cartografica
					ELSE '%' + @Hoja_Cartografica + '%'
					END
 		OR 
		x3.Hoja_Cartografica IS NULL )

	AND (	x3.Vertical_Inicial = CASE @Vert_Inicial 
			WHEN 0 THEN x3.Vertical_Inicial 
			ELSE @Vert_Inicial 
			END
 		OR 
		x3.Vertical_Inicial IS NULL )

	AND (	x3.Vertical_Final = CASE @Vert_Final 
			WHEN 0 THEN x3.Vertical_Final 
			ELSE @Vert_Final 
			END
 		OR 
		x3.Vertical_Final IS NULL )

	AND (	x3.Horizontal_Inicial = CASE @Horz_Inicial 
			WHEN 0 THEN x3.Horizontal_Inicial 
			ELSE @Horz_Inicial 
			END
 		OR 
		x3.Horizontal_Inicial IS NULL )

	AND (	x3.Horizontal_Final = CASE @Horz_Final 
			WHEN 0 THEN x3.Horizontal_Final 
			ELSE @Horz_Final 
			END
 		OR 
		x3.Horizontal_Final IS NULL )

IF @Ordenamiento = 1 -- Expediente
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Expediente 

IF @Ordenamiento = 2 -- Fechas
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Fecha_Ing_PGR 

IF @Ordenamiento = 3 -- Partes
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Promovente 

IF @Ordenamiento = 4 -- Procurador
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Procurador , 
		Materia_Tipo_Asunto , 
		Estado_Procesal 

DROP TABLE #Datos_Fuente
DROP TABLE #EstadosProcesales 
DROP TABLE #TerrenosAfectados
